package com.example.service;

import cn.hutool.core.collection.CollectionUtil;
import com.example.dao.FileInfoDao;
import com.example.entity.FileInfo;
import com.example.vo.FileInfoVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 文件信息服务层
 * <p>
 * 处理文件元数据的业务逻辑，包括文件增删改查、分页查询、条件检索等功能
 * </p>
 */
@Service
public class FileInfoService {

    @Resource
    private FileInfoDao fileInfoDao;

    /**
     * 添加新文件信息
     *
     * @param info 文件信息实体对象（至少需要包含name/file路径等关键字段）
     * @return 插入后的文件信息对象（包含数据库生成的ID）
     */
    public FileInfo add(FileInfo info) {
        fileInfoDao.insertSelective(info);
        return info;
    }

    /**
     * 删除文件信息（物理删除）
     *
     * @param id 要删除的文件记录ID
     */
    public void delete(Long id) {
        fileInfoDao.deleteByPrimaryKey(id);
    }

    /**
     * 更新文件信息（仅更新非空字段）
     *
     * @param info 包含更新字段的文件信息实体（必须包含有效ID）
     */
    public void update(FileInfo info) {
        fileInfoDao.updateByPrimaryKeySelective(info);
    }

    /**
     * 根据ID查询文件详情
     *
     * @param id 文件记录ID
     * @return 对应的文件视图对象（当查询不到数据时返回空对象）
     */
    public FileInfoVo findById(Long id) {
        List<FileInfoVo> list = fileInfoDao.findByNameAndId(null, null,  id);
        if (!CollectionUtil.isEmpty(list)) {
            return list.get(0);
        }
        return new FileInfoVo();
    }

    /**
     * 查询所有文件信息（支持按名称过滤）
     *
     * @return 文件视图对象列表（当传入"all"时返回全量数据）
     */
    public List<FileInfoVo> findAll() {
        return fileInfoDao.findByNameAndId("all", null, null);
    }

    public PageInfo<FileInfoVo> findPage(String name, Long typeId, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<FileInfoVo> info = fileInfoDao.findByNameAndId(name, typeId, null);
        return PageInfo.of(info);
    }
}
